package br.com.imob.modelo;

import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author Gilton Nascimento
 */
@Entity
@Table(name = "\"ACOMPANHAMENTO_FISICO\"", catalog = "imob", schema = "public")
@NamedQueries({
    @NamedQuery(name = "AcompanhamentoFisico.findAll", query = "SELECT a FROM AcompanhamentoFisico a"),
    @NamedQuery(name = "AcompanhamentoFisico.findByAcfisicoId", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.acfisicoId = :acfisicoId"),
    
    @NamedQuery(name = "AcompanhamentoFisico.findByDataAcompanhamento", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.dataAcompanhamento = :dataAcompanhamento"),
    @NamedQuery(name = "AcompanhamentoFisico.findLikeByDataAcompanhamento", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.dataAcompanhamento Like :dataAcompanhamento"),
    
    @NamedQuery(name = "AcompanhamentoFisico.findByReferenciaImovel", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.referenciaImovel = :referenciaImovel"),
    @NamedQuery(name = "AcompanhamentoFisico.findLikeByReferenciaImovel", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.referenciaImovel Like :referenciaImovel"),
    
    @NamedQuery(name = "AcompanhamentoFisico.findByDescricao", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.descricao = :descricao"),
    @NamedQuery(name = "AcompanhamentoFisico.findLikeByDescricao", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.descricao Like :descricao"),
    
    @NamedQuery(name = "AcompanhamentoFisico.findByStatus", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.status = :status"),
    @NamedQuery(name = "AcompanhamentoFisico.findLikeByStatus", query = "SELECT a FROM AcompanhamentoFisico a WHERE a.status Like :status")
    })
public class AcompanhamentoFisico extends ControlEntities implements Serializable {
    
	private static final long serialVersionUID = 1L;
    
	@Id
//  <editor-fold defaultstate="collapsed" desc="Geradores de Sequencias">
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_STORE")
    @SequenceGenerator(name = "SEQ_STORE", sequenceName = "next_acfisico")// </editor-fold>
    @Basic(optional = false)
    @Column(name = "acfisico_id", nullable = false)
    private Integer acfisicoId;
    
	@Basic(optional = false)
    @Column(name = "data_acompanhamento", nullable = false, length = 10)
    private String dataAcompanhamento;
    
	@Column(name = "referencia_imovel", length = 50)
    private String referenciaImovel;
    
	@Column(name = "descricao", length = 150)
    private String descricao;
    
	@Basic(optional = false)
    @Column(name = "status", nullable = false, length = 45)
    private String status;
    
	@JoinColumn(name = "pessoa_ofertada", referencedColumnName = "pessoa_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Pessoa pessoa;
    
	@JoinColumn(name = "pessoa_oferta", referencedColumnName = "pessoa_id", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Pessoa pessoa1;
    
	@JoinColumn(name = "imovel_id", referencedColumnName = "imovel_id", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Imovel imovel;

    public AcompanhamentoFisico() { }
    public AcompanhamentoFisico(Integer acfisicoId) { this.acfisicoId = acfisicoId; }

    public AcompanhamentoFisico(Integer acfisicoId, String dataAcompanhamento, String status) {
        this.acfisicoId = acfisicoId;
        this.dataAcompanhamento = dataAcompanhamento;
        this.status = status;
    }
    
    public AcompanhamentoFisico(Integer acjId, String data, String acjstatus, String desc) {
    	this(acjId, data, acjstatus);
    	descricao = desc;
    }
    
    public AcompanhamentoFisico(String tpStr, String arg) {
    	if("data".equals(tpStr))		dataAcompanhamento = arg;
    	if("descricao".equals(tpStr))	descricao = arg;
    	if("referencia".equals(tpStr))	referenciaImovel = arg;
    	if("status".equals(tpStr))		status = arg;
    }
    
    public AcompanhamentoFisico(int id, String tpStr, String arg) {
    	this(tpStr, arg);
    	acfisicoId = id;
    }
    
    public AcompanhamentoFisico(String desc, String data, String acfStatus, String referencia) {
    	dataAcompanhamento = data;
    	status = acfStatus;
    	descricao = desc;
    	referenciaImovel = referencia;
    }
    
    
    
//    Getts and Setts
    public Integer getAcfisicoId() {
        return acfisicoId;
    }

    public void setAcfisicoId(Integer acfisicoId) {
        this.acfisicoId = acfisicoId;
    }

    public String getDataAcompanhamento() {
        return dataAcompanhamento;
    }

    public void setDataAcompanhamento(String dataAcompanhamento) {
        this.dataAcompanhamento = dataAcompanhamento;
    }

    public String getReferenciaImovel() {
        return referenciaImovel;
    }

    public void setReferenciaImovel(String referenciaImovel) {
        this.referenciaImovel = referenciaImovel;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public Pessoa getPessoa1() {
        return pessoa1;
    }

    public void setPessoa1(Pessoa pessoa1) {
        this.pessoa1 = pessoa1;
    }

    public Imovel getImovel() {
        return imovel;
    }

    public void setImovel(Imovel imovel) {
        this.imovel = imovel;
    }
    
    public Object[] getValues() {
    	Object[] values = { acfisicoId, dataAcompanhamento, descricao, status, referenciaImovel };
    	return values;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (acfisicoId != null ? acfisicoId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof AcompanhamentoFisico)) {
            return false;
        }
        AcompanhamentoFisico other = (AcompanhamentoFisico) object;
        if ((this.acfisicoId == null && other.acfisicoId != null) || (this.acfisicoId != null && !this.acfisicoId.equals(other.acfisicoId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.imob.modelo.AcompanhamentoFisico[acfisicoId=" + acfisicoId + "]";
    }

}
